var fs = require('fs');
var router = require('koa-router');

var koaBody = require('koa-body')({
  // 此middleware是用来处理form-data数据的，一般在文件上传的时候会用到
  // multipart默认是不开启的，要使用 multipart 必须在书写接口的时候
  // 在des和method之间插入元素multipart: true
  // 这样接口才能处理form-data数据，数据包在this.request.body里面
  // 详细看底下注册接口路由时的调用
  multipart: true,
  // 以下是允许传送的数据最大兼容大小，
  // 在nginx代理配置中也要进行一次设置
  jsonLimit: '50mb',
  formLimit: '50mb',
  textLimit: '50mb'
});

var xmlParser = require('koa-buddy')();

var myRouter = new router();

var filePath = __dirname;
var apis = [];

function readFiles(path) {
  var files = fs.readdirSync(path);
  // 通过层级回调，注册接口路由
  if (files) {
    files.forEach((item, index) => {
      if (item.indexOf('.r.js') > -1) {
        var name = item.replace('.r.js', '');
        var obj = require(path + '/' + item);
        var prefix = obj.prefix || '/';
        delete obj.prefix;
        for (key in obj) {
          for (keys in obj[key]) {
            apis.push({
              des: obj[key][keys].des,
              apiroot: prefix + keys,
              type: key
            });
            obj[key][keys].multipart ? myRouter[key](prefix + keys, koaBody, obj[key][keys].method) :
              obj[key][keys].xmlParser ? myRouter[key](prefix + keys, xmlParser, obj[key][keys].method) :
              myRouter[key](prefix + keys, obj[key][keys].method);
            // myRouter.all(prefix + keys, obj[key][keys].method);
            console.log('api@' + key + ':\t' + prefix + keys);
          };
        };
      };
      if (item.indexOf('.') < 0) {
        readFiles.apply(readFiles, [path + '/' + item]);
      };
    });
  };
  return myRouter;
};
module.exports = {
  router: readFiles(filePath),
  apis: apis
};
// console.log(apis)
